#! /usr/bin/env python
# -*- coding: utf-8 -*-

# 这是20121222159张聪的毕业设计所写的代码，创建于2016年3月31日
# 主要是对URL等字符串的处理，时间获取，包括分析在内的各种功能，使用
# 了包括md5生成，正则表达式在内的内容，没有任何公共变量，非常简单

import hashlib,pytz
import re, datetime

#常见的html后缀
textType={'.html','.htm'}

#用来判断URL是域名还是ip地址
def isIP(url):
	 return (re.match('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',url) != None)

#该函数用于得到字符串的唯一标示，主要用于页面在数据库中的ID生成
def GetID(string):
	return hashlib.md5(string.encode('utf-8')).hexdigest()

#该函数用于分割URL，返回格式['域名','目录'，'下级目录'...'页面/文件']
def SplitURL(string):
	#去掉空格和协议
	string=string.strip().strip('http://').strip('https://') \
	.strip('ftp://').strip('/')
	#分割URL
	return string.split('/')

#获得域名或IP
def GetHost(url):
	return SplitURL(url)[0]

#获得各级域名
def GetSplitHost(url):
	if(not isIP(GetHost(url))):
		return GetHost(url).split('.')
	else:
		return GetHost(url)

#判断URL是否含有协议头，没有加上
def ChkAccord(url,accord='http://'):
	url=url.strip()
	#可以看出，这个查找并不是很严格
	if(url.find('http')==-1 and url.find('ftp://')==-1):
		url="%s%s"%(accord,url)
	return url

#去掉锚链接
def RmAnchorLink(url):
	try:
		return url.split('#')[0]
	except:
		return url
#简单的为那些不合格的链接添加url
def ChkHost(father,url):
	#这些是链接不合格的，页内链接
	if(url.find('/')==-1):
		return GetHost(father)+'/'+url
	if(url.find('/')==0):
		return GetHost(father)+url
	return url

#判断文件类型是否是需要分析的那种，网页文本返回true，否则返回false
def ChkType(str):
	if(str.find('text/html')==0):
		return True
	return False

#获得时间
def GetTime():
	tz=pytz.timezone('Asia/Shanghai')
	return datetime.datetime.now(tz)

#通过URl判断文件类型
def IsURLTypeOK(url):
	for i in textType:
		if(url.upper().find(i.upper())>=0):
			return True
	return False

#检测是url吗
def IsUrl(url):
	pass